package com.ws.universal.tools.utils;

import android.annotation.SuppressLint;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

/**
 * @author:ws
 * @date: 2021/7/29 14:30
 * @desc
 */
public final class WeekDateUtils {
    /**
     * 一天的毫秒值
     */
    final public static int M24HOURMS = 86400000;

    /**
     * 把格式化过的时间转换毫秒值
     *
     * @param time      时间
     * @param formatSrt 时间格式 如 yyyy-MM-dd
     * @return 当前日期的毫秒值
     */
    public static long getMillis(String time, String formatSrt) throws ParseException {
        @SuppressLint("SimpleDateFormat") SimpleDateFormat format = new SimpleDateFormat(formatSrt);
        return format.parse(time).getTime();
    }

    /**
     * 将毫秒值格转换为时间 yyyy-MM-dd HH:mm:ss 格式
     *
     * @param date
     * @param format 你要的时间格式 yyyy-MM-dd HH:mm:ss或者yyyy-MM-dd
     * @return 返回转换后的值
     */
    public static String formatDate(Long date, String format) {
        @SuppressLint("SimpleDateFormat") SimpleDateFormat formatter = new SimpleDateFormat(format);
        return formatter.format(date);
    }

    /**
     * 返回某一天一周的集合
     *
     * @param date      随便某一天
     * @param formatSrt 时间格式 yyyy-MM-dd
     * @return 一周时间的数组
     */
    public static List<Long> getWeekDayList(String date, String formatSrt) {
        // 存放每一天时间的集合
        List<Long> weekMillisList = new ArrayList<Long>();
        long dateMill = 0;
        try {
            // 获取date的毫秒值
            dateMill = getMillis(date, formatSrt);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        // Calendar
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(dateMill);
        // 本周的第几天
        int weekNumber = calendar.get(Calendar.DAY_OF_WEEK);

        // 获取本周一的毫秒值
        long mondayMill = dateMill - M24HOURMS * (weekNumber - 2);

        for (int i = 0; i < 7; i++) {
            weekMillisList.add(mondayMill + M24HOURMS * i);
        }
        return weekMillisList;
    }
}
